home *** CD-ROM | disk | FTP | other *** search
- // Copyright (C) 1997-2002 Alias|Wavefront,
- // a division of Silicon Graphics Limited.
- //
- // The information in this file is provided for the exclusive use of the
- // licensees of Alias|Wavefront. Such users have the right to use, modify,
- // and incorporate this code into other products for purposes authorized
- // by the Alias|Wavefront license agreement, without fee.
- //
- // ALIAS|WAVEFRONT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- // INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- // EVENT SHALL ALIAS|WAVEFRONT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- // CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- // DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- // TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- // PERFORMANCE OF THIS SOFTWARE.
- //
- //
- // Alias|Wavefront Script File
- // MODIFY THIS AT YOUR OWN RISK
- // Creation Date: November 22, 1997
- //
- //<doc>
- //<name listUnselected>
- //<owner "Alias|Wavefront Unsupported">
- //
- //<synopsis>
- // string[] listUnselected()
- //
- //<description>
- // Lists the top transform for all DAG objects that are not selected.
- //
- //<flags>
- // None.
- //
- //<returns>
- // string[]: Array of transform nodes names.
- //
- //<examples>
- // sphere; cone; group; select -d;
- // listUnselected;
- // // Result: persp top front side nurbsSphere1 group1 //
- //
- //</doc>
- //
- global proc string[] listUnselected ()
- {
- string $selected[] = `ls -sl -type dagNode`;
- int $selectedCount = size($selected);
- string $assemblies[] = `ls -as`;
-
- if ($selectedCount == 0) {
- return $assemblies;
- } else {
- string $item;
- string $result[];
- string $selectedAbove[];
-
- // Expand selected to include objects above the selected items
- //
- string $selectedAbove[] = $selected;
- $parents = `listRelatives -p -pa $selected`;
- while (size($parents) > 0) {
- for ($item in $parents) {
- $selectedAbove[size($selectedAbove)] = $item;
- }
- $parents = `listRelatives -p -pa $parents`;
- }
- $selected = sort($selected);
- $selectedAbove = sort($selectedAbove);
- int $selectedCount = size($selected);
- int $selectedAboveCount = size($selectedAbove);
-
- // Process assemblies
- //
- int $i, $j, $cmp;
- string $leftOvers[];
- int $leftOverCount;
- int $assemblyCount = size($assemblies);
-
- do {
- $assemblies = sort($assemblies);
-
- // Step 1: process objects not on selectedAbove list
- //
- $i = 0; $j = 0;
- while ($i < $assemblyCount && $j < $selectedAboveCount) {
- $cmp = strcmp($assemblies[$i], $selectedAbove[$j]);
- if ($cmp < 0) {
- $result[size($result)] = $assemblies[$i];
- ++$i;
- } else if ($cmp > 0) {
- ++$j;
- } else {
- $leftOvers[size($leftOvers)] = $assemblies[$i];
- ++$i; ++$j;
- }
- }
- while ($i < $assemblyCount) {
- $result[size($result)] = $assemblies[$i];
- ++$i;
- }
-
- // Step 2: weed out active leftovers
- //
- $i = 0; $j = 0;
- clear($assemblies);
- $leftOverCount = size($leftOvers);
- while ($i < $leftOverCount && $j < $selectedCount) {
- $cmp = strcmp($leftOvers[$i], $selected[$j]);
- if ($cmp < 0) {
- $assemblies[size($assemblies)] = $leftOvers[$i];
- ++$i;
- } else if ($cmp > 0) {
- ++$j;
- } else {
- ++$i; ++$j;
- }
- }
- while ($i < $leftOverCount) {
- $assemblies[size($assemblies)] = $leftOvers[$i];
- ++$i;
- }
- clear($leftOvers);
-
- // Process children of leftovers recursively...
- //
- $assemblies = `listRelatives -c -pa $assemblies`;
- $assemblyCount = size($assemblies);
- } while ($assemblyCount > 0);
- return $result;
- }
- }
-